﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Configuration;
using System.Threading;
using NGI_Logica;
using NGI_Entidades;
using NGI_Auxiliares;

namespace NGI_Sistema.Forms
{
    public partial class InformacionUsuarioLogueado : Form
    {
        public static Int32 MargenPorLado = 30;
        private Label LinkVerMas;
        private Boolean TodosLosPermisosMostrados = false;

        public InformacionUsuarioLogueado()
        {
            InitializeComponent();
        }

        private void Configurar()
        {
            System.Drawing.Point Ubicacion;

            this.Width = this.lblUsuarioLogueado.Width + InformacionUsuarioLogueado.MargenPorLado * 2;

            Int32 IzquierdaLabel = this.Width / 2 - this.lblUsuarioLogueado.Width / 2;
            Int32 ArribaLabel = 10;
            Ubicacion = new Point(IzquierdaLabel, ArribaLabel);
            this.lblUsuarioLogueado.Location = Ubicacion;


            Int32 leftStart = this.MdiParent.ClientSize.Width - (this.Width + (SystemInformation.Border3DSize.Width * 2));
            Int32 topStart = 0;
            Ubicacion = new Point(leftStart, topStart);
            this.Location = Ubicacion;

            this.ConfigurarAltura();
        }

        private void ConfigurarAltura()
        {
            Int32 YFinal = lblNombreUsuarioDato.Height + lblPermisosDato.Height + lblRolDato.Height + lblUsuarioLogueado.Height + 60;
            if (this.LinkVerMas != null)
                YFinal += this.LinkVerMas.Height;

            this.ModificarAlturaFormulario(YFinal);
        }

        private void ModificarAlturaFormulario(Int32 YFinal)
        {
            //Ver como implementarlo en un Thread aparte.    
            FuncionesFormulario.ModificarAltura(YFinal, this);
        }

        private void LlenarCampos()
        {
            lblUsuarioLogueado.Text = "BIENVENIDO AL SISTEMA " + Program.SesionActiva.UsuarioLogueado.Nombre.ToUpper() + " " + Program.SesionActiva.UsuarioLogueado.Apellido.ToUpper();

            lblNombreUsuarioDato.Text = Program.SesionActiva.UsuarioLogueado.NombreUsuario;

            lblRolDato.Text = Program.SesionActiva.UsuarioLogueado.MiRol.Nombre;
            this.MostrarAlgunosPermisos();
        }

        private void MostrarTodosLosPermisos()
        {
            Permiso[] PermisosDelUsuario = Usuarios.ObtenerPermisosDelUsuario(Program.SesionActiva.UsuarioLogueado);
            lblPermisosDato.Text = "";

            foreach (Permiso unPermiso in PermisosDelUsuario)
            {
                lblPermisosDato.Text += "\t\u2022" + unPermiso.Nombre + Environment.NewLine;
            }
            this.TodosLosPermisosMostrados = true;
        }

        private void MostrarAlgunosPermisos()
        {
            Permiso[] PermisosDelUsuario = Usuarios.ObtenerPermisosDelUsuario(Program.SesionActiva.UsuarioLogueado, Convert.ToInt32(ConfigurationManager.AppSettings["CantidadMaximaDefectoAMostrarBasico"].ToString()));
            Int32 CantidadDePermisos = Usuarios.ObtenerCantidadPermisosDelUsuario(Program.SesionActiva.UsuarioLogueado);
            lblPermisosDato.Text = "";

            foreach (Permiso unPermiso in PermisosDelUsuario)
            {
                lblPermisosDato.Text += "\t\u2022" + unPermiso.Nombre + Environment.NewLine;
            }

            if (PermisosDelUsuario.Length < CantidadDePermisos)
                this.AgregarLinkVerMas();

            this.TodosLosPermisosMostrados = false;
        }

        private void AgregarLinkVerMas()
        {
            Label link = new Label();
            link.Name = "lblLink";
            link.Text = "Ver más...";
            link.Location = new Point(lblPermisosDato.Left, lblPermisosDato.Top + lblPermisosDato.Height);
            link.ForeColor = Color.Blue;
            link.Cursor = Cursors.Hand;
            link.AutoSize = true;
            link.Click += new System.EventHandler(this.VerTodosLosPermisos);
            this.Controls.Add(link);
            LinkVerMas = link;
        }

        private void VerTodosLosPermisos(object sender, EventArgs e)
        {
            if (this.TodosLosPermisosMostrados == false)
            {
                this.MostrarTodosLosPermisos();
                this.LinkVerMas.Text = "Ver menos...";
            }
            else
            {
                this.MostrarAlgunosPermisos();
                this.LinkVerMas.Text = "Ver más...";
            }
            this.ConfigurarAlturaLink();
            this.ConfigurarAltura();
        }

        private void ConfigurarAlturaLink()
        {
            this.LinkVerMas.Location = new Point(lblPermisosDato.Left, lblPermisosDato.Top + lblPermisosDato.Height);
        }

        private void InformacionUsuarioLogueado_Load(object sender, EventArgs e)
        {
            this.LlenarCampos();
            this.Configurar();
        }
    }
}
